home *** CD-ROM | disk | FTP | other *** search
/ MacWorld 1999 November / Macworld (1999-11).dmg / Updaters / WhiteCap 3.0.4 / WhiteCap Source.sit / WhiteCap Source / Common / General Tools / Arg.cpp next >
C/C++ Source or Header  |  1999-07-13  |  1KB  |  100 lines

  1. #include "Arg.h"
  2.  
  3.  
  4. #include "UtilStr.h"
  5. #include "CEgOStream.h"
  6.  
  7.  
  8.  
  9. Arg::Arg( long inID, long inData, Arg* inNext ) {
  10.  
  11.     mID            = inID;
  12.     mIsStr        = false;
  13.     mNext        = inNext;
  14.     
  15.     Assign( inData );
  16. }
  17.  
  18.  
  19.     
  20.  
  21.  
  22. Arg::Arg( long inID, const char* inStr, Arg* inNext ) {
  23.     mID            = inID;
  24.     mIsStr        = true;
  25.     mNext         = inNext;
  26.     mData        = NULL; 
  27.  
  28.     Assign( inStr );
  29. }
  30.  
  31.     
  32.  
  33.  
  34.  
  35.     
  36. Arg::~Arg() {
  37.     if ( mIsStr && mData )
  38.         delete ((UtilStr*) mData);
  39.         
  40.     if ( mNext )
  41.         delete mNext;
  42. }
  43.  
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50.  
  51. void Arg::Assign( long inData ) {
  52.     if ( mIsStr && mData ) 
  53.         delete ((UtilStr*) mData);
  54.         
  55.     mIsStr    = false;
  56.     mData    = inData;
  57. }
  58.  
  59.  
  60. void Arg::Assign( const UtilStr* inStr ) {
  61.  
  62.     if ( inStr )
  63.         Assign( inStr -> getCStr() );
  64. }
  65.  
  66.  
  67.  
  68. void Arg::Assign( const char* inStr ) {
  69.     if ( ! mData || ! mIsStr )
  70.         mData = (long) new UtilStr;
  71.         
  72.     mIsStr = true;
  73.             
  74.     ((UtilStr*) mData) -> Assign( inStr );
  75. }
  76.  
  77.  
  78.  
  79. void Arg::ExportTo( CEgOStream* ioStream ) const {
  80.     UtilStr str;
  81.     unsigned char c;
  82.     
  83.     if ( mID > 31 ) {
  84.         for ( int d = 0; d <= 24; d += 8 ) {        // Go thru each byte in ID num
  85.             c = ((mID << d) >> 24 );
  86.             if ( c > 31 && c < 128)
  87.                 ioStream -> PutByte( c );
  88.         }
  89.         ioStream -> PutByte( '=' );
  90.         if ( mIsStr )
  91.             str.AppendAsMeta( (UtilStr*) mData );
  92.         else 
  93.             str.Append( (long) mData );
  94.         ioStream -> Write( &str );
  95.     }
  96. }
  97.  
  98.  
  99.  
  100.